package app;

import gestor.flujo.GestorFlujo;
import interfaz.io.PerifericoEntrada;
import interfaz.io.impl.SwingHandler;
import interfaz.io.impl.Teclado;
import interfaz.usuario.InterfazDeUsuario;

import java.awt.Color;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

import modelo.elector.ModeloElector;
import modelo.elector.ModeloElector.ModeloElectorException;

public class MaquinaVotar {

	private static String FATAL_ERROR = "./src/main/resources/Fatal_Error.jpg";	
	
	/**
	 * Main principal de la aplicacion Maquina de Votar. Inicializa componentes y muestra la vista inicial de voto.
	 * 
	 * @param args parametro omitido
	 */
	public static void main(String[] args){
		
		try{
		
			ModeloElector model = new ModeloElector(); 
		
			InterfazDeUsuario view = new InterfazDeUsuario(model);
			
			model.addObserver(view); 
			
			GestorFlujo gestorFlujo = new GestorFlujo(model,view); // tambien va view en el constructor
			
			PerifericoEntrada periferico = new Teclado(gestorFlujo);//o puede ser Mouse o ...
			
			((SwingHandler)periferico).addListener(view.getPanel());

		}
		catch(ModeloElectorException e){
			
			showErrorFrame();
			
			throw new IllegalStateException("El modelo no pudo cargar archivo de candidatos", e);
		}
	}

	private static void showErrorFrame() {
		
		JFrame errorFrame = new JFrame();
		
		errorFrame.setTitle("Error");
		
		errorFrame.setBackground(Color.RED);
		
		errorFrame.setSize(1024, 900);
		
		errorFrame.add(new JLabel(new ImageIcon(FATAL_ERROR)));
		
		errorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		errorFrame.setVisible(true);
	}
}
